package com.qfjy.homework.wanghuan;

/**
 * @author: WangHuan
 * @DATE: 2022/11/10 19:33
 * @version: 1.0
 */

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Properties;

/**
 * 动态代理的工具类
 */
public class ProxyUtils {

    //目标代理对象
    private Object target;

    public ProxyUtils(Object target){

        this.target = target;

    }

    /**
     * 生成目标代理对象的方法
     */
    public Object getProxy(){

        //代理对象的类加载器
        ClassLoader classLoader = target.getClass().getClassLoader();

        //代理对象的实现接口的集合
        Class<?>[] classes = target.getClass().getInterfaces();


        Object o = Proxy.newProxyInstance(classLoader, classes, new InvocationHandler() {
            /**
             * 调用代理对象的方法
             * @param proxy
             * @param method
             * @param args
             * @return
             * @throws Throwable
             */
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

                //目标代理对象的方法
                return method.invoke(target,args);
            }

        });

        return o;

    }



}
